package com.sailing.xjpb.ipaas.client.core;


import com.sailing.xjpb.ipaas.client.entity.bo.OrganizationTreeBO;
import com.sailing.xjpb.ipaas.client.entity.bo.SipOrganizationBO;
import com.sailing.xjpb.ipaas.client.entity.bo.SipRoleBO;
import com.sailing.xjpb.ipaas.client.entity.bo.SipUserInfoBO;
import com.sailing.xjpb.ipaas.client.entity.dto.SipUserOrgDTO;
import org.springframework.lang.Nullable;

import java.util.List;

/**
 * sip3组织|用户|角色相关接口服务
 *
 * @author YaoWei createDate 2020年10月30日 下午7:57:03
 */
public interface Sip3Service {

    /**
     * 根据userId查询用户信息
     *
     * @param userId {@link SipUserInfoBO}
     */
    SipUserInfoBO querySipUserInfoBySipUserId(String userId);

    /**
     * 根据用户ID获取用户姓名
     *
     * @param userId 用户ID
     */
    String getUserNameById(String userId);

    /**
     * 根据组织code查询组织数据
     *
     * @param orgCode 组织机构代码
     */
    SipOrganizationBO querySipOrganizationByOrgCode(String orgCode);

    /**
     * 适配ipaas 并发
     * 根据组织code查询组织数据
     *
     * @param orgCode 组织机构代码
     */
    SipOrganizationBO querySipOrganizationByOrgCodeV1(String orgCode);

    /**
     * 根据组织机构ID查询机构简称
     *
     * @param orgId 组织机构ID
     * @author YaoWei createDate 2020年11月2日 下午6:06:43
     */
    String getOrgNameById(String orgId);


    /**
     * 根据组织orgId查询组织数据
     *
     * @param orgId 组织机构ID
     */
    SipOrganizationBO querySipOrganizationByOrgId(String orgId);

    /**
     * 根据组织Pid查询直属下级组织数据
     *
     * @param pId 父级组织机构ID
     */
    List<SipOrganizationBO> querySipOrganizationListByPId(String pId);

    /**
     * 通过组织ID查询orgcodeList集合
     *
     * @param id
     */
    List<String> findOrgCodeListByOrgId(String id);

    /**
     * 通过组织ID查询该组织和该组织以下的组织数据
     *
     * @param orgId 组织机构ID
     */
    List<SipOrganizationBO> findConSelfByOrgId(String orgId);

    /**
     * 根据组织机构level查询组织机构信息
     *
     * @param level 组织层级
     */
    List<SipOrganizationBO> findByLevel(String level);

    /**
     * 获取所有组织机构信息
     *
     * @author YaoWei createDate 2020年10月30日 下午7:54:11
     */
    List<SipOrganizationBO> findAll();

    /**
     * 根据组织机构Id获得上级组织机构列表
     */
    List<SipOrganizationBO> findParentOrgList(String orgCode);

    /**
     * 通过组织ID查询该组织和该组织以下的组织机构树
     *
     * @param id 组织机构ID
     */
    List<OrganizationTreeBO> findOrganizationTreeByOrgId(String id);

    /**
     * 根据orgId查询该组织下的所有用户信息
     *
     * @param orgId {@link SipUserInfoBO}
     */
    List<SipUserInfoBO> findChildAllUser(String orgId);

    /**
     * 根据orgId查询该组织下的所有用户信息
     *
     * @param orgId {@link SipUserInfoBO}
     */
    List<SipUserInfoBO> findUserByOrgId(String orgId);

    /**
     * @param orgCode  组织编码
     * @param orgMode  组织查询方式:0查本级及所有下级,1只查本级,2只查所有下级,默认0
     * @param roleCode 角色编码
     * @author YaoWei
     * createDate: 2021年1月25日 下午8:31:06
     * editAuthor: YaoWei
     * editDate: 2021年1月25日 下午8:31:06
     */
    List<SipUserOrgDTO> listRoleUsers(String authorization, String orgCode, String orgMode, String roleCode);

    /**
     * 根据组织机构代码获取所有下级组织(包含当前组织)
     *
     * @param orgCode 组织机构编码
     * @return 所有下级组织(包含当前组织)
     * @author YaoWei
     * createDate: 2021年3月17日 下午2:52:19
     * editAuthor: YaoWei
     * editDate: 2021年3月17日 下午2:52:19
     */
    List<OrganizationTreeBO> findOrganizationTreeByOrgCode(String orgCode);

    /**
     * 根据角色code查找角色信息
     *
     * @param roleCode 角色code
     */
    @Nullable
    SipRoleBO findByRoleCode(String roleCode);

}
